package blbetter.netze;

import java.util.Arrays;
import java.util.Vector;

import blbetter.db.BLDataBase;
import blbetter.db.Spiel;
import blbetter.db.Tabelle;

public class BlBetterInputSitV1 implements BlBetterInputSit {

	private double[] input = new double[11];

	private boolean hasError = false;

	public BlBetterInputSitV1(Spiel spiel, int X, BLDataBase db) {
		// statistiken der letzten spiele erstellen
		int heimId = spiel.heimId;
		int gastId = spiel.gastId;
		int saisonId = spiel.saisonId;
		Vector<Spiel> letzteSpieleHeim = db.getLetzteNSpieleByTeam(heimId, X,
				saisonId, spiel.spieltag);
		Vector<Spiel> letzteSpieleGast = db.getLetzteNSpieleByTeam(gastId, X,
				saisonId, spiel.spieltag);

		int[] punkteToreHeim = Util.getPkteUToreFromSpiele(heimId,
				letzteSpieleHeim);
		int[] punkteToreGast = Util.getPkteUToreFromSpiele(gastId,
				letzteSpieleGast);

		// System.out.println("PktToreHeim: " +
		// Arrays.toString(punkteToreHeim));
		// System.out.println("PktToreGast: " +
		// Arrays.toString(punkteToreGast));

		double durchsPkteDiff = ((double) punkteToreHeim[0] - (double) punkteToreGast[0])
				/ (double) X;

		double durchsGeschossHeim = (double) punkteToreHeim[1] / (double) X;
		double durchsGeschossGast = (double) punkteToreGast[1] / (double) X;
		double durchsGekriegtHeim = (double) punkteToreHeim[2] / (double) X;
		double durchsGekriegtGast = (double) punkteToreGast[2] / (double) X;

		Tabelle tabelle = new Tabelle(saisonId, spiel.spieltag, db);

		int platzHeim = tabelle.getPlatz(heimId);
		int platzGast = tabelle.getPlatz(gastId);

		// input setzen
		setInput(durchsPkteDiff, durchsGeschossHeim, durchsGeschossGast,
				durchsGekriegtHeim, durchsGekriegtGast, spiel.spieltag,
				platzHeim, platzGast);
	}

	private void setInput(double durchsPkteDiff, double durchsGeschossHeim,
			double durchsGeschossGast, double durchsGekriegtHeim,
			double durchsGekriegtGast, int spieltag, int platzHeim,
			int platzGast) {
		// System.out.print("Durchs.PkteDiff.: " + durchsPkteDiff);
		input[0] = (durchsPkteDiff + 3.) / 6.;
		// System.out.println(" -> Input[0]: " + input[0]);
		// durchs. geschoss. Tore
		// System.out.println("Durchs.Geschossen: " + durchsGeschossHeim + "-"
		// + durchsGeschossGast);
		input[1] = durchsGeschossHeim / 4.;
		input[2] = durchsGeschossGast / 4.;
		// druchs. gekriegte Tore
		// System.out.println("Durchs.Gekriegt: " + durchsGekriegtHeim + "-"
		// + durchsGekriegtGast);
		input[3] = durchsGekriegtHeim / 4.;
		input[4] = durchsGekriegtGast / 4.;
		// spieltag (nur spieltage 19-34)
		double[] spieltagBin = Util.getAsBinaryArr(spieltag - 19, 4);
		input[5] = spieltagBin[0];
		input[6] = spieltagBin[1];
		input[7] = spieltagBin[2];
		input[8] = spieltagBin[3];

		// tabellenplaetze
		input[9] = ((double) platzHeim - 1.) / 17.;
		input[10] = ((double) platzGast - 1.) / 17.;
	}

	@Override
	public double[] getInput() {
		return input;
	}

	public String toString() {
		return Arrays.toString(input);
	}

	@Override
	public boolean hasError() {
		return hasError;
	}

}
